# -*- coding: utf-8 -*-
import json
from openai import OpenAI
from tqdm import tqdm 
#from transformers import AutoTokenizer
import re
import time
import httpx

def extract_sections(text):
    # Regular expressions for each section
    patterns = {
        "法官分析": r"\[法官分析\](.*?)(?=\n\[)",
        "审判依据": r"\[审判依据\](.*?)(?=\n\[)",
        "最终判决": r"\[最终判决\](.*?)$"
    }

    # Extracting and returning the content of each section
    extracted = {}
    for section, pattern in patterns.items():
        match = re.search(pattern, text, re.DOTALL)
        if match:
            extracted[section] = match.group(1).strip()
        else:
            extracted[section] = "未找到内容"

    return extracted

def GPT_4(prompt):
    time.sleep(10)
    client = OpenAI(
        base_url="https://oneapi.xty.app/v1", 
        api_key="sk-",
        http_client=httpx.Client(
            base_url="https://oneapi.xty.app/v1",
            follow_redirects=True,
        ),
    )

    completion = client.chat.completions.create(
        model="gpt-3.5-turbo-1106",
        #model="gpt-4-1106-preview",
        messages=[
            {"role": "system", "content": '你是一个专业的法律助手'},
            {"role": "user", "content": prompt}
        ]
    )

    return completion.choices[0].message.content.strip()

# 二审数据集
second_judge_path = 'SimuCourt1.18(2).json'
with open(second_judge_path, 'r', encoding='utf-8') as file:
    second_judge = json.load(file)

GPT4_judge_path = 'case_refine.json'
with open(GPT4_judge_path, 'r', encoding='utf-8') as file:
    GPT4_judge = json.load(file)


prompt_laws = """
    请将所给文本整理成需要的格式。
    示例1：
    当前文本：综上所述，依据《中华人民共和国刑法》第三百四十七条、第三百五十四条、第二十五条、第二十七条、第六十九条、第六十七条、第六十四条；《最高人民法院关于审理毒品犯罪案件适用法律若干问题的解释》第四条。
    输出列表：['《中华人民共和国刑法》第三百四十七条','《中华人民共和国刑法》第三百五十四条','《中华人民共和国刑法》第二十五条','《中华人民共和国刑法》第二十七条','《中华人民共和国刑法》第六十九条','《中华人民共和国刑法》第六十七条','《中华人民共和国刑法》第六十四条','《最高人民法院关于审理毒品犯罪案件适用法律若干问题的解释》第四条']
    示例2：
    当前文本：综上所述，依照《中华人民共和国刑法》第二百六十四条、第五十二条、第五十三条、第六十一条、第六十七条第三款的规定。根据《中华人民共和国刑法》第二百六十四条，盗窃公私财物，数额较大的，应判处有期徒刑，且可以处罚金。同时，《最高人民法院、最高人民检察院〈关于办理盗窃刑事案件适用法律若干问题的解释〉》第一条规定，盗窃公私财物价值一千元至三千元以上、三万元至十万元以上、三十万元至五十万元以上的，应当分别认定为“数额较大”、“数额巨大”、“数额特别巨大”。
    输出列表：['《中华人民共和国刑法》第二百六十四条','《中华人民共和国刑法》第五十二条','《中华人民共和国刑法》第五十三条','《中华人民共和国刑法》第六十一条','《中华人民共和国刑法》第六十七条第三款','《最高人民法院、最高人民检察院〈关于办理盗窃刑事案件适用法律若干问题的解释〉》第一条']
    示例3：
    当前文本：综上所述，依照《中华人民共和国刑法》第一百三十三条之一第一款第（二）项、第六十七条第三款、第七十二条第一款、第七十二条第二款、第七十三条第一款、《中华人民共和国刑法》第四十二条、第四十四条、第五十二条、第五十三条第一款第（一）项。
    输出列表：['《中华人民共和国刑法》第一百三十三条之一第一款第（二）项','《中华人民共和国刑法》第六十七条第三款','《中华人民共和国刑法》第七十二条第一款','《中华人民共和国刑法》第七十二条第二款','《中华人民共和国刑法》第七十三条第一款','《中华人民共和国刑法》第四十二条','《中华人民共和国刑法》第四十四条','《中华人民共和国刑法》第五十二条','《中华人民共和国刑法》第五十三条第一款第（一）项']
    示例4：
    当前文本：根据《最高人民法院关于审理民间借贷案件适用法律若干问题的规定》第二十九条第二款第（一）项规定，借贷双方既未约定借期内的利率，也未约定逾期利率，出借人主张借款人自逾期还款之日起按照年利率6%支付资金占用期间利息的，人民法院应予支持。同时，根据《中华人民共和国合同法》第二百一十一条第二款规定，自然人之间的借款合同约定支付利息的，借款的利率不得违反国家有关限制借款利率的规定。
    输出列表：['《最高人民法院关于审理民间借贷案件适用法律若干问题的规定》第二十九条第二款第（一）项','《中华人民共和国合同法》第二百一十一条第二款']
    示例5：
    当前文本：综上所述，依照：《中华人民共和国刑法》第三百一十九条、第二十五条第三款、第二十七条、第六十四条。"
    输出列表：['《中华人民共和国刑法》第三百一十九条','《中华人民共和国刑法》第二十五条第三款','《中华人民共和国刑法》第二十七条','《中华人民共和国刑法》第六十四条',]
    示例6：
    当前文本：综上所述，依照：《中华人民共和国行政诉讼法》第五十九条、第六十条；《工伤保险条例》第九条第六项；《中华人民共和国社会保险法》第十五条、第十七条。",
    输出列表：['《中华人民共和国行政诉讼法》第五十九条','《中华人民共和国行政诉讼法》第六十条','《工伤保险条例》第九条第六项', '《中华人民共和国社会保险法》第十五条', '《中华人民共和国社会保险法》第十七条']

    请整理以下内容：
    当前文本：<RAW_LAWS>
    输出列表：
    """

prompt_crime_result = """
    请将所给文本整理成需要的格式。
    示例1：
    当前文本：原审法院审判结果：被告人李文胜犯危险驾驶罪，判处拘役二个月，并处罚金人民币3000元\n 二审法院审判结果：维持岷县人民法院（2022）甘1126刑初150号刑事判决，即判处被告人李文胜拘役二个月，并处罚金人民币3000元。
    输出列表：{"罪名":"上诉人犯危险驾驶罪","刑期":"判处拘役二个月","罚金":"处罚金人民币三千元"}
    示例2：
    当前文本：原审法院审判结果：被告人柳玉昊犯诈骗罪，判处有期徒刑二年四个月，并处罚金人民币三万元\n 二审法院审判结果：一、维持鞍山市铁西区人民法院（2022)辽0303刑初328号刑事判决，驳回上诉人柳玉昊的上诉请求。
    输出列表：{"罪名":"上诉人犯诈骗罪","刑期":"判处有期徒刑二年四个月","罚金":"处罚金人民币三万元"}
    示例3：
    当前文本：原审法院审判结果：被告人刘泽佳犯合同诈骗罪，判处有期徒刑十年六个月，并处罚金十万元\n 二审法院审判结果：维持原判，驳回上诉。
    输出列表：{"罪名":"上诉人犯合同诈骗罪","刑期":"判处有期徒刑十年六个月","罚金":"处罚金十万元"}
    示例4：
    当前文本：原审法院审判结果：被告人陈其洋犯故意伤害罪，判处有期徒刑六个月\n 二审法院审判结果：上诉人（原审被告人）陈其洋犯故意伤害罪，判处有期徒刑三个月，缓刑一年。
    输出列表：{"罪名":"上诉人陈其洋犯故意伤害罪","刑期":"判处有期徒刑三个月，缓刑一年"}
    示例4：
    当前文本：原审法院审判结果：被告人赵某犯开设赌场罪，判处有期徒刑三年六个月，并处罚金人民币十万元\n 二审法院审判结果：对上诉人赵某犯开设赌场罪，判处有期徒刑三年，缓刑四年。
    输出列表：{"罪名":"上诉人犯开设赌场罪","刑期":"判处有期徒刑三年，缓刑四年","罚金":"处罚金人民币十万元"}
    示例5：
    当前文本：原审法院审判结果：一、被告人王卫新犯职务侵占罪，判处有期徒刑一年九个月，并处罚金人民币5000元。\n 二审法院审判结果：由于涉案事实较为复杂，需要进一步审查被告人王卫新提出的合作协议书内容以及款项数额的真实性，本院决定裁定案件发回审查，并要求补充相关证据，以便进行进一步审理。
    输出列表：{"罪名":"无","刑期":"无","罚金":"无"}
    示例6：
    当前文本：原审法院审判结果：被告人孙合理犯抢夺枪支罪，判处有期徒刑五年。\n 二审法院审判结果：撤销原审判决，维持被告人孙合理犯抢夺枪支罪的定性，判处有期徒刑三年。
    输出列表：{"罪名":"上诉人犯抢夺枪支罪","刑期":"判处有期徒刑三年"}
    示例7：
    当前文本：原审法院审判结果：以交通肇事罪判处被告人李沅珂有期徒刑十个月\n 二审法院审判结果：撤销广东省佛山市南海区人民法院（2021）粤0605刑初3492号刑事判决；对上诉人李沅珂犯交通肇事罪一案，判处有期徒刑七个月，缓刑一年。
    输出列表：{"罪名":"上诉人犯交通肇事罪","刑期":"判处有期徒刑七个月，缓刑一年"}
    示例8：
    当前文本：原审法院审判结果：被告人白某某犯盗窃罪，判处有期徒刑三年，并处罚金20000元\n 二审法院审判结果：一、撤销陕西省澄城县人民法院（2021）陕0525刑初168号刑事判决；二、对被告人白某某犯盗窃罪，判处有期徒刑三年，缓刑三年。
    输出列表：{"罪名":"上诉人犯盗窃罪","刑期":"判处有期徒刑三年，缓刑三年"}
    
    请整理以下内容：
    当前文本：<RAW_RESULTS>
    输出列表：
    """

prompt_other_result = """
    请将所给文本整理成需要的格式。
    示例1：
    当前文本：判决如下：被告杜跃胜应向原告章建返还借款200000元；被告杜跃胜应自2021年12月20日至2023年10月19日按照年利率6%支付资金占用期间的利息；三、被告杜跃胜应承担本案的全部诉讼费用。\n\n以上是本院的最终判决，请被告杜跃胜按判决给出的期限履行还款义务，并依法支付利息和诉讼费用。
    输出列表：{"结果1":"被告应向原告章建返还借款200000元","结果2":"被告杜跃胜应自2021年12月20日至2023年10月19日按照年利率6%支付资金占用期间的利息"}
    示例2：
    当前文本：判决如下：驳回牛来金的诉讼请求。案件受理费50元，由牛来金负担。
    输出列表：{"结果1":"驳回牛来金的诉讼请求"}
    示例3：
    当前文本：判决如下：撤销1995年3月10日舒城县民政局为潘祖明与段贤翠作出的结婚登记行为。案件受理费50元，由被告舒城县民政局负担。\n\n如不服本判决,可在判决书送达之日起十五日内,向本院递交上诉状，上诉于**中级人民法院。\n\n以上判决结果仅限于当前案件的裁决，判决具有法律效力。
    输出列表：{"结果1":"撤销1995年3月10日舒城县民政局为潘祖明与段贤翠作出的结婚登记行为"}
    示例4：
    当前文本：判决如下：一、驳回原告宁波远东汽车部件制造有限公司的诉讼请求。二、本案案件受理费200元，由原告宁波远东汽车部件制造有限公司负担。
    输出列表：{"结果1":"驳回原告宁波远东汽车部件制造有限公司的诉讼请求"}
    示例5：
    当前文本：判决如下：一、被告代毅支付原告上海泉臣国际贸易有限公司货款72,000元；二、被告支付自2022年1月16日起至付清欠款之日止的逾期利息；三、驳回原告要求被告赔偿律师费的诉讼请求。
    输出列表：{"结果1":"被告代毅支付原告上海泉臣国际贸易有限公司货款72,000元","结果2":"被告支付自2022年1月16日起至付清欠款之日止的逾期利息"}
    示例6：
    当前文本：判决如下：一、解除原告与被告杭州康贝教育咨询有限公司签订的《玛尔比恩开园VIP系列早教服务协议》及《玛尔比恩开园特惠帕特鲁入园过渡班服务协议》；二、判令被告向原告返还服务费共计21303.61元；三、本案诉讼费由被告承担。
    输出列表：{"结果1":"解除原告与被告杭州康贝教育咨询有限公司签订的《玛尔比恩开园VIP系列早教服务协议》及《玛尔比恩开园特惠帕特鲁入园过渡班服务协议》","结果2":"判令被告向原告返还服务费共计21303.61元"}

    请整理以下内容：
    当前文本：<RAW_RESULTS>
    输出列表：
    """

model_judge_eval = {}
error_list = []
error_list1 = ['(2021)桂05刑终275号', '（2023）赣02行终78号', '（2023）沪01民终15530号']
for number, model_judge in tqdm(GPT4_judge.items()):
    if number in error_list1:
        current_model_judge = {}
        if '[法官分析]' in model_judge and '[审判依据]' in model_judge and '[最终判决]' in model_judge:
            contents = extract_sections(model_judge)
            error_str = ['继续审理', '暂无法', '核实后', '调查核实','决定暂时','鼓励','不支持原告','建议需要','需要进一步','决定支持','发回','审　判　长']
            i = 0
            
            if i == 0:
                try:
                    # 法院意见
                    current_model_judge["法院意见"] = contents['法官分析']

                    # 审判结果
                    for case in second_judge:
                        if case['案号'] == number:
                            current_case = case

                    if current_case['类别'] == '刑事':
                        first_result = current_case['一审法院审判结果']
                        result_all = '原审法院审判结果：' + first_result + '\n 二审法院审判结果：' + contents['最终判决']
                        result_prompt = prompt_crime_result.replace('<RAW_RESULTS>', result_all)
                    else:
                        result_all = contents['最终判决']
                        result_prompt = prompt_other_result.replace('<RAW_RESULTS>', result_all)

                    reslut_dict_str = GPT_4(result_prompt)
                    try:
                        
                        reslut_dict = eval(reslut_dict_str)
                        current_model_judge["判决结果"] = reslut_dict
                        # 审判依据
                        try:
                            laws_prompt = prompt_laws.replace('<RAW_LAWS>', contents['审判依据'])
                            laws_list_str = GPT_4(laws_prompt)
                            try:
                                laws_list = eval(laws_list_str)
                                current_model_judge["审判依据"] = laws_list
                                model_judge_eval[number] = current_model_judge
                            except:
                                print('laws_list_str:', laws_list_str)
                                print('Error laws (transfer to dict):', number)
                                error_list.append(number)
                        except:
                            print('Error laws (transfer to right form):', number)
                            error_list.append(number)
                    except:
                        print('reslut_dict_str:', reslut_dict_str)
                        print('Error result (transfer to dict):', number)
                        error_list.append(number)
                except:
                    print('Error result (transfer to right form):', number)
                    error_list.append(number)

            else:
                print('无明确判决：', number)
                error_list.append(number)
                
        else:
            print('格式错误：', number)
            error_list.append(number)


        with open('case_refine_.json', 'w', encoding='utf-8') as file:
            json.dump(model_judge_eval, file, ensure_ascii=False, indent=4)

print(error_list)



    
